package com.whmall.service.crm.module.supplierchemical.service;

import com.whmall.component.entity.dto.PageRspDTO;
import com.whmall.service.crm.entity.dto.supplierchemical.ChemicalCoaInfoReqDTO;
import com.whmall.service.crm.entity.dto.supplierchemical.SupplierChemicalCoaQueryByReqDTO;
import com.whmall.service.crm.entity.dto.supplierchemical.SupplierChemicalCoaQueryReqDTO;
import com.whmall.service.crm.entity.dto.supplierchemical.SupplierChemicalCoaQueryRspDTO;

import java.util.List;

public interface SupplierChemicalCoaService {

    /**
     * 搜索 化合物COA信息
     * @return
     */
    PageRspDTO<SupplierChemicalCoaQueryRspDTO> queryAllCoaInfo(
            SupplierChemicalCoaQueryReqDTO supplierChemicalCoaQueryReqDTO);

    /**
     * 查询化合物COA（通用）
     */
    List<SupplierChemicalCoaQueryRspDTO> queryBy(SupplierChemicalCoaQueryByReqDTO reqDTO);

    /**
     * 新增 化合物COA信息
     * @return
     */
    void chemicalCoaAdd(ChemicalCoaInfoReqDTO chemicalCoaInfoReqDTO);

    /**
     * 编辑 化合物COA信息
     * @return
     */
    void updateChemicalCoa(ChemicalCoaInfoReqDTO chemicalCoaInfoReqDTO);

    /**
     * 查看 化合物COA信息
     * @return
     */
    SupplierChemicalCoaQueryRspDTO queryCoaInfoById(Long chemicalCoaId);

    /**
     * 复制COA成为一条新记录，使来源成为订单明细
     *
     * @param requesterId   请求者ID
     * @param chemicalCoaId 原COA ID
     * @param orderDetailId 订单明细ID
     */
    void copyAsOrderDetailSource(Long requesterId, Long chemicalCoaId, Long orderDetailId, Integer cCoaSourceType);

    /**
     * 重置COA的来源ID（使其与外部来源取消关联）
     *
     * @param requesterId     请求者ID
     * @param chemicalCoaId 化合物COA ID
     */
    void resetSourceId(Long requesterId, Long chemicalCoaId);

    /**
     * 设置COA字段
     * @param requesterId 请求者ID
     * @param chemicalCoaId 化合物COA ID
     * @param onlyNonNullFeilds 字段更新请求，只设置非空字段，不会进行参数校验
     */
    void settingFields(Long requesterId, Long chemicalCoaId, ChemicalCoaInfoReqDTO onlyNonNullFeilds);
}
